/*******************************************************************************
 * @file Copyright 2009 The CREATE Lab at CMU
 * 
 *       This file is part of JubJub, an open source project.
 *       http://code.google.com/p/jubjub/
 * 
 *       Redistribution and use in source and binary forms, with or without
 *       modification, are permitted provided that the following conditions are
 *       met:
 * 
 *       Redistributions of source code must retain the above copyright notice,
 *       this list of conditions and the following disclaimer.
 * 
 *       Redistributions in binary form must reproduce the above copyright
 *       notice, this list of conditions and the following disclaimer in the
 *       documentation and/or other materials provided with the distribution.
 * 
 *       Neither the name of Carnegie Mellon nor the names of its contributors
 *       may be used to endorse or promote products derived from this software
 *       without specific prior written permission.
 * 
 *       THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 *       "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 *       LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
 *       PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
 *       HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 *       SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 *       LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 *       DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 *       THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 *       (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 *       OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 *******************************************************************************/

package edu.cmu.ri.createlab.jj.blocks;

/**
 * 
 * @author Erik Pasternak
 *
 * These can either be a variable name or a code piece.
 * 
 * This class is to simplify storing chunks of code that require variables
 * to be swapped into the code when compiled. This way inputs to inline code
 * chunks can be easily filled by iterating through a list and replacing
 * each VAR found with the corresponding variable name.
 */
public class TaggedCodePiece
{
   public enum TCPType
   {
      CODE,
      VAR
   }
   
   private TCPType type;
   private String content;
   private int nameIndex;
   
   public TaggedCodePiece(String content, int index)
   {
      this.type = TCPType.VAR;
      this.content = content;
      this.nameIndex = index;
   }
   
   public TaggedCodePiece(String content)
   {
      this.type = TCPType.CODE;
      this.content = content;
      this.nameIndex = -1;
   }
   
   public TCPType getType()
   {
      return type;
   }
   
   public String getContent()
   {
      return content;
   }
   
   public int getIndex()
   {
      return nameIndex;
   }
   
   public String toString()
   {
      String s = "TCPType:" + type.toString();
      if(type == TCPType.CODE) s += " Index:" + nameIndex;
      s += " Content:\"" + content + "\"";
      return s;
   }
   

}
